
//todo
// 假设有k个人质和k个绑匪围成一圈。人质的编号从1到k，绑匪的编号从k+1到2k。
// 从编号1开始，每次从其中选出第m个人(隔m-1选出一人)出列。
// 希望求出m的最小值，使得最先出列的k个人都是绑匪，即都是编号从k+1到2k的人。
#include "iostream"
#include "vector"
#include "unordered_map"
#include "algorithm"

struct BigNum{
    std::vector<int64_t> vec;//0是低位
    int64_t size=10000;
    BigNum(){
        vec.resize(1);
        vec[0]=0;
    }
    void evalue(int64_t a){
        int wp=0;
        while (a){
            if(wp==vec.size()){
                vec.push_back(0);
            }
            vec[wp]=a%size;
            a/=size;
            wp++;
        }
    }
    void multiple(int64_t num){
        int64_t jinwei=0;
        for(int i=0;i<vec.size();i++){
            vec[i]*=num;
            vec[i]+=jinwei;
            jinwei=vec[i]/size;
            vec[i]%=size;

            if(jinwei!=0&& i==vec.size()-1){
                vec.push_back(0);
            }
        }
    }
    void print(){
        for(int i=vec.size()-1;i>=0;i--){
            if(i!=vec.size()-1){
                printf("%04lld",vec[i]);
            }else{
                printf("%lld",vec[i]);
            }
        }
    }
};
void calc(int n){
    BigNum a;
    a.evalue(1);
    for(int i=2;i<=n;i++){
        a.multiple(i);
        a.print();
        printf("\n");
    }
}
int main() {
//    BigNum a;
//    a.print();
//    a.evalue(10);
//    a.print();
//    a.multiple(33);
//    a.print();
//    a.evalue(100);
//    a.print();
    int n;//测试次数
//    int
//    is_huiwen(1441,10);
    while (std::cin >> n) {
        calc(n);
    }
//    while(1){}
    return 0;
}